// 知识点：erase()操作返回的是最后一个被删元素的后一个位置
#include <iostream>
#include <list>
#include <vector>

using namespace std;

int main(int argc, char const *argv[]) {
  /* code */
  int ia[] = {0, 1, 1, 2, 3, 5, 8, 13, 21, 55, 89};
  vector<int> v(ia, ia + 11);
  list<int> l(ia, ia + 11);
  vector<int>::iterator it1 = v.begin(); //使用迭代器
  list<int>::iterator it2 = l.begin();

  while (it1 != v.end()) //删除操作
  {
    if ((*it1) % 2 == 0) {
      it1 = v.erase(it1); //将删除位置更新
    } else                //若判断非偶数，则移到下一位置
    {
      ++it1;
    }
  }

  while (it2 != l.end()) {
    if (*it2 % 2 != 0) {
      it2 = l.erase(it2); //将删除位置更新
    } else                //若判断非偶数，则移到下一位置
    {
      ++it2;
    }
  }

  vector<int>::iterator it3 = v.begin(); //需要重新定义临时迭代器
  list<int>::iterator it4 = l.begin();
  for (; it3 != v.end(); ++it3) {
    cout << *it3 << " ";
  }
  cout << endl;
  for (; it4 != l.end(); ++it4) {
    cout << *it4 << " ";
  }
  return 0;
}
